<?php if ( ! defined( 'BASEPATH' ) ) exit( 'No direct script access allowed' );

	class Android extends CI_Controller {

		public function login() {
		    $this->db->from( 'usuario' );
		    $this->db->where( "Email = '" . $this->input->post( 'Login' ) . "' and Senha = md5( '" . $this->input->post( 'Senha' ) . "' )" );
		    $result = $this->db->get();
		    
		    $dados = $result->row();

		    if( $result->num_rows() > 0 ) {
		    	$newdata = array(
		               'email' => $dados->Nome,
		               'pessoaID' => $dados->UsuarioID,
		               'logged_in' => TRUE,
		               'banco' => $dados->BancoID
		           );
		        
		    } else
		    	$newdata = array( 'logged_in' => FALSE );
		    
		    exit( json_encode( $newdata ) );
		}
		
		private function usarDatabase( $database ) {
			$this->db->query( 'USE ' . $database . '_finanz');
		}
		
		private function salvar( $tabela, $campos, $chavePrimaria ) {
			$this->usarDatabase( $campos[ 'DatabaseID' ] );
			
			$campos = TratarPostAndroid( $campos, $chavePrimaria );
			return $this->cadastromodel->salvar( $tabela, $campos, $chavePrimaria );
		}
		
		private function excluir( $database, $tabela, $parametro ) {
			$this->usarDatabase( $database );
			$this->db->delete( $tabela, $parametro );
		}
		
		private function listar( $database, $tabela, $select = '*', $where = null, $limit = null, $arrJoin = null ) {
			$this->usarDatabase( $database );
			
			$this->db->select( $select );
			
			$this->db->from( $tabela );
			
			if( $arrJoin )
			foreach ( $arrJoin as $join => $arrTables )
				foreach ( $arrTables as $table => $campos )
					$this->db->join( $table, $campos, $join );
			
			if ( $where )
				$this->db->where( $where );
				
			if ( $limit )
				return $this->db->get()->row();
			else
				return $this->db->get()->result();
		}
		
		/**
		 * Banco
		 **/
		public function cadastro_banco() {
			exit( json_encode( $this->listar( $this->input->post( 'DatabaseID' ), 'banco', '*', array( 'BancoID' => $this->input->post( 'BancoID' ) ), 1 ) ) );
		}
		
		public function salvar_banco() {
			if ( $this->salvar( 'banco', $this->input->post(), 'BancoID' ) )
				echo 1;
			else
				echo 2;
		}

		public function listar_banco() {
			$data[ 'banco' ] = $this->listar( $this->input->post( 'DatabaseID' ), 'banco', ' BancoID, Nome ' );
			
			exit( json_encode( $data ) );
		}

		public function excluir_banco() {
			$this->excluir( $this->input->post( 'DatabaseID' ), 'banco', array( 'BancoID' => $this->input->post( 'BancoID' ) ) );
		}

		/**
		 * Conta
		 **/
		public function cadastro_conta() {
		
			$pessoa = $this->listar( $this->input->post( 'DatabaseID' ), 'pessoa', ' PessoaID, Nome ' );
		
			$SelecionePessoa = new stdClass();
			$SelecionePessoa->PessoaID = 0;
			$SelecionePessoa->Nome = 'Selecione';
		
			array_unshift( $pessoa, $SelecionePessoa );
			
			$banco = $this->listar( $this->input->post( 'DatabaseID' ), 'banco', ' BancoID, Nome ' );
			
			$SelecioneBanco = new stdClass();
			$SelecioneBanco->BancoID = 0;
			$SelecioneBanco->Nome = 'Selecione';
		
			array_unshift( $banco, $SelecioneBanco );
		
			$contaID = $this->input->post( 'ContaID' );
			if ( $contaID )
				$data[ 'dados' ] = $this->listar( $this->input->post( 'DatabaseID' ), 'conta', '*', array( 'ContaID' => $this->input->post( 'ContaID' ) ), 1 );
			
			$data[ 'pessoa' ] = $pessoa;
			$data[ 'banco' ] = $banco;
			
			exit( json_encode( $data ) );
		}
		
		public function salvar_conta() {
			if ( $this->salvar( 'conta', $this->input->post(), 'ContaID' ) )
				echo 1;
			else
				echo 2;
		}

		public function listar_conta() {
			$data[ 'conta' ] = $this->listar( $this->input->post( 'DatabaseID' ), 'conta', ' ContaID, Conta ' );
			
			exit( json_encode( $data ) );
		}

		public function excluir_conta() {
			$this->excluir( $this->input->post( 'DatabaseID' ), 'conta', array( 'ContaID' => $this->input->post( 'ContaID' ) ) );
		}

		/**
		 * Categoria
		 **/
		public function cadastro_categoria() {
		
			$lancamentotipo = $this->listar( $this->input->post( 'DatabaseID' ), 'dmlancamentotipo', ' LancamentoTipoID, Nome ' );
			
			$SelecioneLancamentoTipo = new stdClass();
			$SelecioneLancamentoTipo->LancamentoTipoID = 0;
			$SelecioneLancamentoTipo->Nome = 'Selecione';

			array_pop( $lancamentotipo );
		
			array_unshift( $lancamentotipo, $SelecioneLancamentoTipo );

			$lancamentoCategoriaID = $this->input->post( 'LancamentoCategoriaID' );
			if ( $lancamentoCategoriaID )
				$data[ 'dados' ] = $this->listar( $this->input->post( 'DatabaseID' ), 'lancamentocategoria', '*', array( 'LancamentoCategoriaID' => $this->input->post( 'LancamentoCategoriaID' ) ), 1 );
			
			$data[ 'lancamentotipo' ] = $lancamentotipo;
			
			$data[ 'erro' ] = $lancamentoCategoriaID;
			
			exit( json_encode( $data ) );
		}
		
		public function salvar_categoria() {
			if ( $this->salvar( 'lancamentocategoria', $this->input->post(), 'LancamentoCategoriaID' ) )
				echo 1;
			else
				echo 2;
		}

		public function listar_categoria() {
			$data[ 'categoria' ] = $this->listar( $this->input->post( 'DatabaseID' ), 'lancamentocategoria', ' LancamentoCategoriaID, Nome ' );

			exit( json_encode( $data ) );
		}

		public function excluir_categoria() {
			$this->excluir( $this->input->post( 'DatabaseID' ), 'lancamentocategoria', array( 'LancamentoCategoriaID' => $this->input->post( 'LancamentoCategoriaID' ) ) );
		}
		
		/**
		 * Lancamento
		 **/
		public function cadastro_lancamento() {

			$pessoas = $this->listar( $this->input->post( 'DatabaseID' ), 'pessoa', ' PessoaID, Nome ' );
			$contas = $this->listar( $this->input->post( 'DatabaseID' ), 'conta c', ' ContaID, CONCAT_WS( " -> ", b.Nome, c.Conta ) AS Nome ', null, null, array( 'inner' => array( 'banco b' => ' b.BancoID = c.BancoID ' ) ) );
			$lancamentocategorias = $this->listar( $this->input->post( 'DatabaseID' ), 'lancamentocategoria', ' LancamentoCategoriaID, Nome ' );
						
			$SelecioneLancamentoPessoa = new stdClass();
			$SelecioneLancamentoPessoa->PessoaID = 0;
			$SelecioneLancamentoPessoa->Nome = 'Selecione';
		
			$SelecioneLancamentoConta = new stdClass();
			$SelecioneLancamentoConta->ContaID = 0;
			$SelecioneLancamentoConta->Nome = 'Selecione';
		
			$SelecioneLancamentoCategoria = new stdClass();
			$SelecioneLancamentoCategoria->LancamentoCategoriaID = 0;
			$SelecioneLancamentoCategoria->Nome = 'Selecione';
		
			array_unshift( $pessoas, $SelecioneLancamentoPessoa );
			array_unshift( $contas, $SelecioneLancamentoConta );
			array_unshift( $lancamentocategorias, $SelecioneLancamentoCategoria );
			
			$lancamentoID = $this->input->post( 'LancamentoID' );
			if ( $lancamentoID ) {
				$dados = $this->listar( $this->input->post( 'DatabaseID' ), 'lancamento', '*', array( 'LancamentoID' => $this->input->post( 'LancamentoID' ) ), 1 );
				$data[ 'dados' ] = $dados;
			}
			
			$data[ 'pessoas' ] = $pessoas;			
			$data[ 'contas' ] = $contas;			
			$data[ 'categorias' ] = $lancamentocategorias;
			
			exit( json_encode( $data ) );
		}
		
		public function salvar_lancamento() {
			$dados = $this->input->post();
			
			$DataVencimento = explode( '/', $dados[ 'DataVencimento' ] );
			
			$dados[ 'DataVencimento' ] = date( "Y-m-d", mktime( 0, 0, 0, $DataVencimento[1], $DataVencimento[0], $DataVencimento[2] ) );
			$id = $this->salvar( 'lancamento', $dados, 'LancamentoID' );
			
			$this->atualizaContaFinanceira( $id );

			echo 1;
		}

		public function listar_lancamento() {
			$data[ 'lancamento' ] = $this->listar( $this->input->post( 'DatabaseID' ), 'lancamento', ' LancamentoID, CONCAT_WS( " -> ", Observacao, CAST( Valor AS CHAR ) ) AS Observacao ' );
			
			exit( json_encode( $data ) );
		}

		public function excluir_lancamento() {
			$this->excluir( $this->input->post( 'DatabaseID' ), 'lancamento', array( 'LancamentoID' => $this->input->post( 'LancamentoID' ) ) );
		}
		
		private function atualizaContaFinanceira($idLancamento, $tipo='I'){
			$dadosLancamento = $this->cadastromodel->pesquisar( "lancamento lan", "lan.lancamentoID = $idLancamento", 1, 0, array( 'inner' => array( 'lancamentocategoria lc' => 'lan.LancamentoCategoriaID = lc.LancamentoCategoriaID' )));
			$tipoLancamento = $this->cadastromodel->pesquisar("dmlancamentotipo", "dmlancamentotipo.LancamentoTipoID = " . $dadosLancamento->LancamentoTipoID, 1);  
			$dadosContaLancamento = $this->cadastromodel->pesquisar("conta", "conta.ContaID = " . $dadosLancamento->ContaID, 1);  

			if($tipo=="E"){
				if($tipoLancamento->LancamentoTipoID == 1){
					$tipoLancamento->LancamentoTipoID = 2;
				}elseif($tipoLancamento->LancamentoTipoID == 2){
					$tipoLancamento->LancamentoTipoID = 1;
				}
			}
		
			if($dadosLancamento->Liquidado){
				$valorAtual = $dadosContaLancamento->SaldoAtual;
	
				switch ($tipoLancamento->LancamentoTipoID){
					case 1: 
						$valorAtual = $valorAtual - $dadosLancamento->Valor;
						break;
					case 2:
						$valorAtual = $valorAtual + $dadosLancamento->Valor;
						break;
					case 3:
						$dadosContaTranferencia = $this->cadastromodel->pesquisar("conta", "conta.ContaID = " . $dadosLancamento->ContaTransferenciaID, 1);  
				
						if ( $tipo == 'I' ) {
							$valorAtual -= $dadosLancamento->Valor;
							$dadosContaTranferencia->SaldoAtual +=  $dadosLancamento->Valor;
						} else {
							$valorAtual += $dadosLancamento->Valor;
							$dadosContaTranferencia->SaldoAtual -=  $dadosLancamento->Valor;
						}
					
						$dadosContaTranferencia = ( array ) $dadosContaTranferencia;
				
						$this->cadastromodel->Salvar("conta", $dadosContaTranferencia, 'ContaID');
						break;
				}
			
				if($valorAtual < 0){
					$dadosAlerta["PessoaID"] = $this->session->userdata('pessoaLogadoID');
					$dadosAlerta["Alerta"] = "O lançamento " . $dadosLancamento->LancamentoID . " deixou a sua conta negativada, por favor valide estas informações.";
					$dadosAlerta["TipoAlerta"] = "L";
					$dadosAlerta["Lido"] = false;
	
					$this->db->insert("alerta", $dadosAlerta);
				}
		
				$dadosContaLancamento->SaldoAtual = $valorAtual;
			
				$dadosContaLancamento = ( array ) $dadosContaLancamento;
			
				$this->cadastromodel->Salvar("conta", $dadosContaLancamento, 'ContaID');
			}

			return true;
		}
	}
	/* End of file participantes.php */
	/* Location: ./application/controllers/participantes.php */
